package com.tanjun.userservice.web.controller.admin;

import com.tanjun.common.annotation.Edit;
import com.tanjun.common.model.R;
import com.tanjun.common.response.PageResponse;
import com.tanjun.userservice.apiservice.request.role.AdminRoleIdListRequest;
import com.tanjun.userservice.apiservice.request.role.AdminRoleMenuRequest;
import com.tanjun.userservice.apiservice.request.role.AdminRolePageRequestRequest;
import com.tanjun.userservice.apiservice.request.role.AdminRoleRequest;
import com.tanjun.userservice.apiservice.response.adminrole.admin.AdminRoleResponse;
import com.tanjun.userservice.web.biz.admin.AdminRoleBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

import static com.tanjun.common.constants.UrlConstant.URL_AUTH.SYSTEM;
import static com.tanjun.common.constants.UrlConstant.URL_USER.ADMIN;

@RestController
@RequestMapping(ADMIN+"/adminRole")
public class BaseAdminRoleController {
    @Autowired
    private AdminRoleBiz adminRoleBiz;

    /**
     * 新增角色
     * @param paramVo 角色数据
     * @return 是否保存成功
     */
    @PostMapping(SYSTEM+"/add")
    public R addRole(@RequestBody @Validated AdminRoleRequest paramVo){
        adminRoleBiz.addRole(paramVo);
        return R.OK();
    }

    /**
     * 修改角色
     * @param paramVo 角色数据
     * @return 是否保存成功
     */
    @PostMapping(SYSTEM+"/update")
    public R updateRole(@RequestBody @Validated(Edit.class) AdminRoleRequest paramVo){
        adminRoleBiz.updateRole(paramVo);
        return R.OK();
    }

    /**
     * 删除角色
     * @param paramVo 角色数据
     * @return 是否删除成功
     */
    @PostMapping(SYSTEM+"/delRoles")
    public R delRoles(@RequestBody @Validated AdminRoleIdListRequest paramVo){
        adminRoleBiz.delRoles(paramVo);
        return R.OK();
    }

    /**
     * 获取角色详细信息
     * @param roleId 角色id
     * @return 详细信息
     */
    @GetMapping(SYSTEM+"/getRole")
    public R<AdminRoleResponse> getRoleById(@RequestParam("roleId") Long roleId){
        return R.OK(adminRoleBiz.getRoleById(roleId));
    }

    /**
     * 获取角色分页信息
     * @param paramVo 分页参数
     * @return 角色信息
     */
    @PostMapping(SYSTEM+"/listPage")
    public R<PageResponse<AdminRoleResponse>> listPage(@RequestBody @Validated AdminRolePageRequestRequest paramVo){
        return R.OK(adminRoleBiz.listPageRole(paramVo));
    }

    /**
     * 获取所有的角色信息
     * @return 角色信息
     */
    @GetMapping(SYSTEM+"/list")
    public R<List<AdminRoleResponse>> list(){
        return R.OK(adminRoleBiz.listAll());
    }

    /**
     * 保存角色对应的权限
     * @param paramVo 角色权限
     * @return 是否成功
     */
    @PostMapping(SYSTEM+"/saveRoleMenu")
    public R saveRoleMenus(@RequestBody @Validated AdminRoleMenuRequest paramVo){
        adminRoleBiz.saveRoleMenu(paramVo);
        return R.OK();
    }

    /**
     * 查询角色对应的菜单id
     * @param roleId 角色id
     * @return 对应的菜单id list
     */
    @GetMapping(SYSTEM+"/getRoleMenuIdList")
    public R<List<Long>> getRoleMenuIdList(@RequestParam("roleId") Long roleId){
        return R.OK(adminRoleBiz.getRoleMenuIdList(roleId));
    }


}
